package jdk8.lambda;

import static java.lang.System.out;

/**
	1) @FunctionalInterface注解的作用
	->  @FunctionalInterface标注在一个接口上，说明这个接口是一个函数式接口。
	-> ​那么关于函数式接口，有如下特点：
	-> 有且只有一个抽象方法
	-> 可以有多个静态方法
	-> 可以有多个default方法(默认方法)
	-> 可以有多个Object(基类)的的抽象方法如下，目的是要求子类重写
 */

// 并不是所有接口都可以使用Lambda表达式，只有函数式接口可以。
// 按照Java8函数式接口的定义，其只能有一个抽象方法，否则就不是函数时接口，就无法用Lambda表达式。
// 可以使用@FunctionalInterface标注函数式接口，在编译时提前发现错误。

@FunctionalInterface
public interface FunctionalInterfaceSyntax {
	// 有且只有一个抽象方法
	int m1(int i);

	// Invalid '@FunctionalInterface' annotation; InterfaceA is not a functional
	// interface
	// int m2(int i);

	// 可以有多个Object(基类)的的抽象方法如下
	@Override
	boolean equals(Object obj);

	@Override
	String toString();

	@Override
	int hashCode();

	// 可以有多个default方法(默认方法)
	default void defMethod(Object o) {
	};

	// 可以有多个静态方法
	static void showStatic() {
		out.println("InterfaceA++showStatic");
	}

	static void showStatic(Object param) {
		out.println(param);
	}
}
